#include <stdio.h>
#include "ofc/DCube.h"
#include "ofc/DInt.h"

int main(int argc, char *argv[])
{
  DCube *cu1 = [DCube alloc];
  DCube *cu2 = [DCube new  ];

  DInt  *nr;
  DInt  *nr1;

  [cu1 init :5 :10 :2];                // Init cube with 5 columns, 10 rows and 2 layers

  printf("Index (4,9,1) is %s valid.\n", ([cu1 isValid :4 :9 :1] ? "" : "not"));
  printf("Index (5,9,1) is %s valid.\n", ([cu1 isValid :5 :9 :1] ? "" : "not"));

  printf("Length of cube1:%ld\n", [cu1 length]);

  nr1 = [DInt new]; [nr1 set :1];
  [cu1 set :3 :7 :0 :nr1];             // Set nr1 at (3,7,0)

  nr = [DInt new]; [nr set :2];
  [cu1 set :0 :0 :0 :nr];              // Set 2 at (0,0,0)

  nr = [DInt new]; [nr set :3];
  printf("Nr1 is %s present in the cube1.\n", ([cu1 has :nr1] ? "" : "not"));
  printf("Nr3 is %s present in the cube1.\n", ([cu1 has :nr]  ? "" : "not"));

  nr = [cu1 get :0 :0 :0];
  printf("Index: (0,0,0) has %d.\n", (nr != nil ? [nr get] : -1));
  nr = [cu1 get :1 :1 :1];
  printf("Index: (1,1,1) has %d.\n", (nr != nil ? [nr get] : -1));

  [cu2 columns :3];                    // Resize the columns of cube2

  printf("Length of cube2:%ld\n", [cu2 length]);

  [cu1 free];                          // Cleanup the cubes including the stored objects
  [cu2 free];

  return 0;
}

